function A(){ //创建一个函数，函数在创建的时候会挂载一个prototype属性，属性指向一个新创建的对象（原型对象）
    
}

console.log(A.prototype)//输出原型对象

const B = new A()//通过函数A创建出变量B
console.log(B.__proto__ === A.prototype) //创建的变量B有一个__proto__属性，这个属性指向A函数的prototype属性

console.log(A.__proto__ === Function.prototype) //函数A其实也是一个对象，也有__proto__属性，函数A是通过new一个Funcion构造出来的，所以A的__proto__指向Function.prototype

console.log(A.prototype.__proto__ === Object.prototype) //A的prototype属性也是一个对象，也有__proto__属性，这个属性指向Object.prototype，因为是由Object构造出来的，所以A.prototype.__proto__指向Object.prototype

console.log(Object.prototype.__proto__ === null) //Object.prototype的__proto__指向null，因为Object.prototype是原型链的终点，没有原型了，所以指向null

console.log(Function.prototype.__proto__ === Object.prototype) //Function函数的隐式原型也是指向Object.prototype的

console.log(Function.__proto__ === Function.prototype) //Function构造函数也是一个对象，也有__proto__属性
//按道理来说，应该要指向创建这个Function构造函数的构造函数，但是Function构造函数是通过Function构造函数创建出来的
// 所以它的__proto__指向Function.prototype

console.log(Object.__proto__ === Function.prototype)
